package com.example.mediaplayerdemo.chart.activity;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;

import com.example.mediaplayerdemo.R;
import com.example.mediaplayerdemo.view.MyMarkerView;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.LimitLine;
import com.github.mikephil.charting.components.MarkerView;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;

import java.util.ArrayList;
import java.util.List;

public class LineChartActivity extends AppCompatActivity implements OnChartValueSelectedListener {
    private LineChart lineChart;
    private XAxis xAxis;
    private YAxis yAxis;
    private static final int count = 6;
    LineDataSet set1, set2;
//    List<String> X_label;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_line_chart);
        initView();
        initChart();
        initData();


    }

    private void initData() {
//        每个数据是一个 Entry
        ArrayList<Entry> v1 = new ArrayList<>();
        ArrayList<Entry> v2 = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            float val = (float) (Math.random() * 100) - 30;
            float val2 = (float) (Math.random() * 50) - 35;
            v1.add(new Entry(i, val));
            v2.add(new Entry(i, val2));
//            int count = X_label.size();
//            if (count == 0) {
//                X_label.add("1");
//            } else {
//                X_label.add(String.valueOf(Integer.parseInt(X_label.get(count - 1)) + 1));
//            }
        }
        // 2. 创建一个数据集 DataSet ，用来添加 Entry。一个图中可以包含多个数据集
        set1 = new LineDataSet(v1, "DataSet 1");
        set1.setAxisDependency(YAxis.AxisDependency.LEFT);
        set2 = new LineDataSet(v2, "DataSet 2");
        set2.setAxisDependency(YAxis.AxisDependency.LEFT);
        // 3. 通过数据集设置数据的样式，如字体颜色、线型、线型颜色、填充色、线宽等属性
// draw dashed line
        set1.enableDashedLine(10f, 5f, 0f);
// black lines and points
        set1.setColor(Color.BLACK);
        set1.setCircleColor(Color.BLACK);
        set2.setCircleColor(Color.RED);
        set2.setColor(Color.RED);
// line thickness and point size
        set1.setLineWidth(1f);
        set1.setCircleRadius(3f);

// draw points as solid circles
        set1.setDrawCircleHole(false);
        set2.setDrawCircleHole(true);

// 4.将数据集添加到数据 ChartData 中
        List<ILineDataSet> dataSets = new ArrayList<>();
        dataSets.add(set1);
        dataSets.add(set2);
        LineData data = new LineData(dataSets);

// 5. 将数据添加到图表中
        lineChart.setData(data);
        lineChart.invalidate(); //刷新
    }

    private void initChart() {
        lineChart.setBackgroundColor(Color.WHITE);  //图表背景
        lineChart.getDescription().setEnabled(false);   //文本描述
        lineChart.setTouchEnabled(true);    //允许启用/禁用与图表的所有可能的触摸交互。
        lineChart.setDragEnabled(false);     //启用/禁用图表的拖动（平移）。
        lineChart.setScaleXEnabled(false);  //启用/禁用 x 轴缩放。
        lineChart.setScaleYEnabled(false);   //启用/禁用 y 轴缩放。
        lineChart.setScaleEnabled(false);    //启用/禁用两个轴上图表的缩放。
        lineChart.setPinchZoom(false);   //如果设置为 true，则启用手指触摸图片缩放。如果禁用，则以单独缩放 x 轴和 y 轴。
        lineChart.setDoubleTapToZoomEnabled(false);     //将此值设置为 false 以禁止通过双击来缩放图表。
        lineChart.setHighlightPerDragEnabled(true);    //在图表上将此值设置为 true，以便在完全缩 小时在图表表面上进行每次拖动时突出显示。默认值：true
        lineChart.setOnChartValueSelectedListener(this);    //监听
        lineChart.setDrawGridBackground(false); // 是否显示表格颜色
        lineChart.setMaxVisibleValueCount(5);
        lineChart.setNoDataText("You need to provide data for the chart."); //无数据时显示
        MarkerView mv = new MyMarkerView(this);
        lineChart.setMarker(mv);

//        x轴设置
        xAxis = lineChart.getXAxis();
//       允许显示 X 轴的垂直网格线
        xAxis.enableAxisLineDashedLine(10f, 10f, 0f);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setTextSize(10f);
        xAxis.setTextColor(Color.RED);
        xAxis.setEnabled(true);
        xAxis.setDrawAxisLine(true);    //轴线
        xAxis.setDrawGridLines(false);  //网格线
        xAxis.setDrawLabels(true);
        xAxis.setAvoidFirstLastClipping(true);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
//        X_label = new ArrayList<>();
//        xAxis.setValueFormatter(new IndexAxisValueFormatter() {
//            @Override
//            public String getFormattedValue(float value) {
//                return X_label.get((int) value);
//            }
//        });
//       获取 Y 轴
        yAxis = lineChart.getAxisLeft();
//       禁止右轴
        lineChart.getAxisRight().setEnabled(false);
//        Y 轴的水平网格线
        yAxis.enableGridDashedLine(10f, 10f, 0f);
//        设置 Y 轴的数值范围
        yAxis.setAxisMaximum(200f);
        yAxis.setAxisMinimum(-50f);
        yAxis.setStartAtZero(true);

        LimitLine xLimitLine = new LimitLine(4f ,"x LimitLine");
        xLimitLine.setLineColor(Color.GREEN);
        xLimitLine.setTextColor(Color.GREEN);
        xAxis.addLimitLine(xLimitLine);
        LimitLine yLimitLine = new LimitLine(0f ,"y LimitLine");
        yLimitLine.setLineColor(Color.RED);
        yLimitLine.setTextColor(Color.RED);
        yAxis.addLimitLine(yLimitLine);
    }

    private void initView() {
        lineChart = (LineChart) findViewById(R.id.lineChart);
    }

    @Override
    public void onValueSelected(Entry entry, Highlight highlight) {
        Log.i("TAG", "ValueSelected");
    }

    @Override
    public void onNothingSelected() {
        Log.i("TAG", "NothingSelected");
    }
}